package model.dao;

import java.util.List;

import javax.persistence.TypedQuery;

import excecoes.DadosCadastroInvalidos;

import model.basicas.Usuario;
import model.interfaces.IUsuarioDAO;

public class UsuarioDAO extends GenericoDAO<Usuario> implements IUsuarioDAO {

	@Override
	public void inserir(Usuario objeto) throws DadosCadastroInvalidos {
		
		if(!this.getEntitymanager().getTransaction().isActive())
		{
			this.getEntitymanager().getTransaction().begin();
		}
		this.getEntitymanager().persist(objeto);
		this.getEntitymanager().getTransaction().commit();

	}

	@Override
	public void remover(Usuario objeto) {

		if(!this.getEntitymanager().getTransaction().isActive())
		{
			this.getEntitymanager().getTransaction().begin();
		}

		Usuario aux = consultarPorId(objeto.getId());
		if (aux != null)
		{
			this.getEntitymanager().remove(aux);
			this.getEntitymanager().getTransaction().commit();
		}

	}

	@Override
	public Usuario atualizar(Usuario objeto) {
		if(!this.getEntitymanager().getTransaction().isActive())
		{
			this.getEntitymanager().getTransaction().begin();
		}
		
		Usuario aux = consultarPorId(objeto.getId());
		if(aux != null){
			this.getEntitymanager().merge(objeto);
			this.getEntitymanager().getTransaction().commit();
		}
		
		
		return objeto;

	}

	@Override
	public List<Usuario> listarCadastrados() {
		
		TypedQuery<Usuario> q = this.getEntitymanager().createQuery
				("select u from Usuario u", Usuario.class);

		List<Usuario> list = q.getResultList();	

		return list;
	}

	@Override
	public Usuario consultarPorId(long id) {

		return this.getEntitymanager().find(Usuario.class, id);

	}
	
	public boolean VerificaUsuario(String login, String senha){
		
		List<Usuario> list = listarCadastrados();
		for (Usuario u : list) {
			if((login != null)&&(login.equalsIgnoreCase(u.getLogin())) && 
					((senha != null)&&(senha.equalsIgnoreCase(u.getSenha()))) ){
				return true;
			}
		}
		
		return false;
	
}


}
